package modelo;
/**
 * Clase que representa un nivel del juego, con su propio mapa y robot
 * @author Francisco Barreneche
 *
 */
public class Nivel {
	protected Mapa mapa;
	protected Robot robot;
	
	/**
	 * Constructor que permite inicializar el estado interno del nivel
	 */
	public Nivel() {
		mapa = new Mapa(); 
		//llenar el mapa con algo
		for(int i = 0;i<Mapa.CANT_FILAS;i++){
			for(int j=0;j<Mapa.CANT_COLUMNAS;j++){
				Celda c;
				c = new  Celda(i,j, new Asfalto());
				mapa.establecerCelda(c);
			}
		}
		Celda aux = mapa.obtenerCelda(5, 7);
		aux.ponerObstaculo(new Caja(aux));
		aux = mapa.obtenerCelda(5, 8);
		aux.ponerObstaculo(new Planta(aux));
		aux = mapa.obtenerCelda(5, 9);
		aux.ponerObstaculo(new Pared(aux));
		aux = mapa.obtenerCelda(5, 10);
		aux.ponerColeccionable(new Coleccionable("baliza"));
		aux = mapa.obtenerCelda(5, 11);
		aux.ponerColeccionable(new Coleccionable("cono"));
		aux = mapa.obtenerCelda(5, 12);
		aux.ponerPremio(new PremioBalas(10));
		aux = mapa.obtenerCelda(5, 13);
		PremioNafta p = new PremioNafta(10);
		aux.ponerPremio(p);
		aux = mapa.obtenerCelda(5, 6);
		PremioPuntos p2 = new PremioPuntos(100);
		aux.ponerPremio(p2);
		aux = new Celda(1,2,new Arena());
		mapa.establecerCelda(aux);
		aux = new Celda(1,3,new Arena());
		mapa.establecerCelda(aux);
		aux = mapa.obtenerCelda(8, 8);
		aux.ponerObstaculo(new Concreto(aux));
		aux = mapa.obtenerCelda(8, 9);
		aux.ponerObstaculo(new Caja(aux));
		aux = mapa.obtenerCelda(9, 8);
		Pared p1 = new Pared(aux, new PremioBalas(10));
		aux.ponerObstaculo(p1);
		aux = new Celda(0,8,new Agua());
		mapa.establecerCelda(aux);
		aux = new Celda(0,9,new Fuego());
		mapa.establecerCelda(aux);
	}
	
	/**
	 * Getter para el atributo mapa del nivel
	 * @return El mapa del nivel
	 */
	public Mapa obtenerMapa() {
		return mapa;
	}
	
	/**
	 * Metodo que permite obtener la celda de finalizacion del nivel, es decir, la celda en la cual se gana el nivel al llegar
	 * @return La celda de finalizacion del nivel
	 */
	public Celda obtenerCeldaFin() {
		return mapa.obtenerCelda(10, 10);
	}
	
	/**
	 * Metodo que permite obtener la celda en la que se inicia el nivel
	 * @return La celda en la que se va a poner al robot para que inicie el nivel
	 */
	public Celda obtenerCeldaInicio() {
		return mapa.obtenerCelda(1, 1);
	}
	
	/**
	 * Getter para el atributo robot
	 * @return El robot del nivel
	 */
	public Robot obtenerRobot() {
		return this.robot;
	}
	
	/**
	 * Setter para el robot
	 * @param r El robot que se quiere para el nivel
	 */
	public void establecerRobot(Robot r) {
		this.robot = r;
	}
	
}	
